package com.demo.java.OD301_350.OD326;

import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【字符串摘要(B卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146119085
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读取输入字符串
        String inputStr = scanner.nextLine();

        // 过滤输入字符串，只保留字母字符
        StringBuilder filteredStr = new StringBuilder();
        for (int i = 0; i < inputStr.length(); i++) {
            char ch = inputStr.charAt(i);
            if (Character.isLetter(ch)) {
                filteredStr.append(ch);
            }
        }

        // 计数字符的连续出现次数
        int count = 1;
        char currentChar = Character.toLowerCase(filteredStr.charAt(filteredStr.length() - 1));
        List<Map.Entry<Character, Integer>> charCountList = new ArrayList<>();
        Map<Character, Integer> charCountMap = new HashMap<>();

        // 从后向前遍历字符串，计算字母的连续出现次数
        for (int i = filteredStr.length() - 2; i >= 0; i--) {
            char ch = Character.toLowerCase(filteredStr.charAt(i));
            if (currentChar == ch) {
                count++; // 如果相同字母，增加计数
            } else {
                // 如果计数为1，则处理前一个字母的计数
                if (count == 1) {
                    count += charCountMap.getOrDefault(currentChar, 0) - 1;
                    charCountMap.put(currentChar, count + 1);
                } else {
                    charCountMap.put(currentChar, count);
                }
                // 添加计数的字母
                charCountList.add(new AbstractMap.SimpleEntry<>(currentChar, count));
                currentChar = ch;
                count = 1;
            }
            // 处理最后一个字母
            if (i == 0) {
                if (count == 1) {
                    count += charCountMap.getOrDefault(currentChar, 0) - 1;
                }
                charCountList.add(new AbstractMap.SimpleEntry<>(currentChar, count));
            }
        }

        // 按照次数降序排序，如果次数相同则按照字母升序排序
        charCountList.sort((a, b) -> {
            if (a.getValue().equals(b.getValue())) {
                return a.getKey() - b.getKey();
            }
            return b.getValue() - a.getValue();
        });

        // 拼接结果字符串
        StringBuilder result = new StringBuilder();
        for (Map.Entry<Character, Integer> entry : charCountList) {
            result.append(entry.getKey()).append(entry.getValue());
        }

        // 输出结果
        System.out.println(result.toString());
    }
}